/**
 * <p>文件名: MaskUtil.java</p>
 * <p>版权: Copyright © 2018</p>
 * <p>所有权: 深圳市房地产中介协会</p>
 * <p>作者: zwj</p>
 * <p>创建时间: 2019年6月6日 下午4:20:16</p>
 */
package com.siss.tenancy.user.utils;

import org.apache.http.util.TextUtils;

/**
 * <p>
 * 类名: MaskUtil
 * </p>
 * <p>
 * 描述:请在此填写相关说明
 * </p>
 * <p>
 * 创建人: zwj
 * </p>
 * <p>
 * 创建时间: 2019年6月6日 下午4:20:16
 * </p>
 * <p>
 * 修改内容: ......
 * </p>
 * <p>
 * 修改说明: ......
 * </p>
 * <p>
 * 修改时间: ......
 * </p>
 * <p>
 * 修改人: ......
 * </p>
 * <p>
 * 每次修改，请增加上述修改信息说明</>
 */
public class MaskUtil {
	public static void main(String[] args) throws Exception {
		System.out.println(idMask("460026199403120614",10,2));
	}
	/**
	 * 用户身份证号码的打码隐藏加星号加*
	 * <p>
	 * 18位和非18位身份证处理均可成功处理
	 * </p>
	 * <p>
	 * 参数异常直接返回null
	 * </p>
	 *
	 * @param idCardNum 身份证号码
	 * @param front     需要显示前几位
	 * @param end       需要显示末几位
	 * @return 处理完成的身份证
	 */
	public static String idMask(String idCardNum, int front, int end) {
		// 身份证不能为空
		if (TextUtils.isEmpty(idCardNum)) {
			return null;
		}
		// 需要截取的长度不能大于身份证号长度
		if ((front + end) > idCardNum.length()) {
			return null;
		}
		// 需要截取的不能小于0
		if (front < 0 || end < 0) {
			return null;
		}
		// 计算*的数量
		int asteriskCount = idCardNum.length() - (front + end);
		StringBuffer asteriskStr = new StringBuffer();
		for (int i = 0; i < asteriskCount; i++) {
			asteriskStr.append("*");
		}
		String regex = "(\\w{" + String.valueOf(front) + "})(\\w+)(\\w{" + String.valueOf(end) + "})";
		return idCardNum.replaceAll(regex, "$1" + asteriskStr + "$3");
	}
}
